정규 표현식

✒️ 2025-05-29 15:53 내용 수정


참고 자료 : 위키 백과 정규 표현식, Inpa dev's JavaScript 정규 표현식 문법 총정리 + 응용 예제, adjh's Java 정규표현식(RegExp) 이해하기 : 패턴, 문자 클래스, 자주 사용 패턴, TCPSchool 정규 표현식의 개념, TCPSchool 정규 표현식의 응용

특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어


구성 및 기호

/regex/flag

플래그

플래그 설명
i Ignore Case, 대소문자를 구별하지 않음
g Global, 문자열 내 모든 패턴 검색(모든 검색 결과를 배열로 반환)
m Multi Line, 문자열의 행이 바뀌어도 검색
s .이 개행 문자 \n도 포함
u unicode, 유니코드 전체 지원
y sticky, 문자열 내 특정 위치에서 검색을 진행하는 sticky 모드 활성화

검색 기준 패턴

기호 설명
| OR의 의미
[] 대괄호 내이 문자 중 하나를 선택함. |을 여러 개 쓴 것과 같음
[^문자] 대괄호 내의 문자를 제외한 문자
^문자열 특정 문자열로 시작함
문자열$ 특정 문자열로 끝남
a|b : a 또는 b

[a-z] : a부터 z 중 하나

[^a] : a를 제외한 문자

^abc : abc로 시작하는 문자

abc$ : abc로 끝나는 문자

양의 지정

기호 설명
? 0~1번 발생하는 패턴과 일치시킴
최소한의 매칭을 할 때 사용 가능
* 0번 이상 발생하는 패턴과 일치시킴
+ 1번 이상 발생하는 패턴과 일치시킴
{n} n번 발생
{min,} 최소 min번 발생
{min, max} 최소 min번 이상, 최대 max번 이하 발생
수량자 유형 Greedy 수량자 Non-Greedy 수량자 설명
0회 이상 반복 * *? 가능한 한 많이(*) 또는 적게(*?) 반복
1회 이상 반복 + +? 최소 1회 이상 반복
0 또는 1회 반복 ? ?? 0 또는 1회 반복
특정 횟수 반복 {n} {n}? 정확히 n회 반복
최소 n회 이상 반복 {n,} {n,}? 최소 n회 이상 반복
n회 이상 m회 이하 반복 {n,m} {n,m}? n회 이상 m회 이하 반복
a? : a가 0번 또는 1번 반복

a* : a가 0번 이상 반복

a+ : a가 1번 이상 반복

a{2} : a가 2번 발생

a{5, } : a가 최소 5번 발생

a{1, 3} : a가 1번 이상 3번 이하 발생

특정 문자 및 숫자 매칭(약식 표현)

기호 설명
a-zA-Z 영어 알파벳 전체
r-g가-힣 한글 범위 지정
0-9 숫자 범위 지정
. 줄바꿈을 제외한 모든 문자열
\d 숫자
\D 숫자 제외
\w 밑줄 문자를 포함한 영문과 숫자. [a\zA-Z0-9_]와 동일
\W 문자 제외
\s space 공백
\S space 공백 제외
\특수기호 특수기호. *, ^, &, !, ? 등
\t 탭(U+0009)
\A 내부 줄이 아닌 문자열의 시작점과 일치
\z 내부 줄이 아닌 문자열의 끝과 일치

그룹 패턴

기호 설명
() 그룹화 및 캡쳐. 캡쳐했던 패턴도 같이 반환
(?:패턴) 캡쳐 없는 그룹화
(?=) 앞쪽 일치
(?!) 부정 앞쪽 일치
(?<=) 뒤쪽 일치
(?<!) 부정 뒤쪽 일치
(abc) : abc를 포함

\\d(?=a) : a 앞의 숫자
123a -> 123

(?<=s)\\d : s 뒤의 숫자
s123 -> 123

사용자 지정 정규 표현식 예시

정규 표현식 설명
^[a-z|A-Z]*$ 영문자만 허용
^[a-z]*$ 소문자만 허용
^[A-Z]*$ 대문자만 허용
^[\w]*$ 공백 미포함 문자열만 허용
^[\W]*$ 공백 포함 문자열만 허용
^[\d]*$ 숫자만 허용
^[\D]*$ 숫자가 아닌 것만 허용
[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]$ 이메일 형식(-, _, . 포함, 대소문자 구분 없음), google.com같은 형식만 지원
^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$ RFC 5322 Standard 이메일 형식, test.ac.kr같은 형식도 지원
^[a-z|A-Z]{3,6}[0-9]{3,6}$ 아이디 형식(6~12자리)
(?=.*\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&()+_~\[\]\\]).{8,}$ 비밀번호(소문자, 대문자, 특수문자 1개 이상 포함하고 8자 이상)
^\S+(?=.*\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&()+_~\[\]\\]).{8,}\S+$ 비밀번호(공백 미포함 소문자, 대문자, 특수문자 1개 이상 포함하고 8자 이상)
[\d]{11}*$ 전화번호 형식 ex) 0101112222
^([0-9]{3}[-]+[0-9]{4}[-]+[0-9]{4})|([0-9]{3}[0-9]{4}[0-9]{4})$ 전화번호 형식 ex) 0101112222 또는 010-1111-2222
^([\d]{3}[-]+[\d]{4}[-]+[\d]{4})|([\d]{3}[\d]{4}[\d]{4})$ 위와 동일